#include "widget.h"
#include "ui_widget.h"
#include "qtoolbutton.h"
#include "QMouseEvent"
#include "QDebug"
#include "QTimer"
#include "QMessageBox"
QVector<QToolButton *> vector;
QString tubi="車馬相仕帅仕相馬車炮炮兵兵兵兵兵車馬象士将士象馬車炮炮卒卒卒卒卒";
int csx[40],csy[40],tune,sj=90,jy=1;
QTimer *timer;
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    vector.push_back(ui->red_che1);
    vector.push_back(ui->red_ma1);
    vector.push_back(ui->red_xiang1);
    vector.push_back(ui->red_shi1);
    vector.push_back(ui->red_shuai);
    vector.push_back(ui->red_shi2);
    vector.push_back(ui->red_xiang2);
    vector.push_back(ui->red_ma2);
    vector.push_back(ui->red_che2);
    vector.push_back(ui->red_pao1);
    vector.push_back(ui->red_pao2);
    vector.push_back(ui->red_bin1);
    vector.push_back(ui->red_bin2);
    vector.push_back(ui->red_bin3);
    vector.push_back(ui->red_bin4);
    vector.push_back(ui->red_bin5);

    vector.push_back(ui->black_che1);
    vector.push_back(ui->black_ma1);
    vector.push_back(ui->black_xiang1);
    vector.push_back(ui->black_shi1);
    vector.push_back(ui->black_shuai);
    vector.push_back(ui->black_shi2);
    vector.push_back(ui->black_xiang2);
    vector.push_back(ui->black_ma2);
    vector.push_back(ui->black_che2);
    vector.push_back(ui->black_pao1);
    vector.push_back(ui->black_pao2);
    vector.push_back(ui->black_bin1);
    vector.push_back(ui->black_bin2);
    vector.push_back(ui->black_bin3);
    vector.push_back(ui->black_bin4);
    vector.push_back(ui->black_bin5);

    //显示棋盘
    init();
    timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(all_tune()));
    timer->start(1000);
}

void Widget::init(){

    ui->qipan->setPixmap(QPixmap(QString(":/image/qipan.jpg")));
    ui->qipan->setGeometry(0,0,692,768);
    ui->win_label->setGeometry(692,0,332,100);
    ui->win_label->setStyleSheet("background:aqua;color:red");
    ui->win_label->setText("红方落子中...");
    ui->time_label->setGeometry(692,100,332,100);
    ui->time_label->setStyleSheet("background:aqua;color:red");
    ui->time_label->setText("回合时间:90秒");
    tune=1;
    for(int i=0;i<32;i++){
        qzst[i]=0;
    }
    for(int i=0;i<15;i++){
        for(int j=0;j<15;j++){
            qpst[i][j]=-1;
        }
    }
    int qiziwh=70;
    for(int i=0;i<9;i++){
        vector[i]->setGeometry(-1+i*78,-2,qiziwh,qiziwh);
        csx[i]=vector[i]->x();
        csy[i]=vector[i]->y();
        qpst[(vector[i]->x()+1)/78][(vector[i]->y()+2)/78]=i;
        vector[i]->setStyleSheet(QString("QToolButton{background:#d6b38d;color:red;border-radius: 35px;}"));
//        vector[i]->setIcon(QPixmap(QString(":/image/aqua.png")));
//        vector[i]->setIconSize(QSize(qiziwh,qiziwh));
        vector[i]->setText(QString(tubi[i]));
    }

    for(int i=9;i<11;i++){
        vector[i]->setGeometry(77+(i-9)*6*78,-2+78*2,qiziwh,qiziwh);
        csx[i]=vector[i]->x();
        csy[i]=vector[i]->y();
        qpst[(vector[i]->x()+1)/78][(vector[i]->y()+2)/78]=i;
        vector[i]->setStyleSheet(QString("QToolButton{background:#d6b38d;color:red;border-radius: 35px;}"));
//        vector[i]->setIcon(QPixmap(QString(":/image/aqua.png")));
//        vector[i]->setIconSize(QSize(qiziwh,qiziwh));
        vector[i]->setText(QString(tubi[i]));
    }
    for(int i=11;i<16;i++){
        vector[i]->setGeometry(-1+(i-11)*2*78,-2+78*3,qiziwh,qiziwh);
        csx[i]=vector[i]->x();
        csy[i]=vector[i]->y();
        qpst[(vector[i]->x()+1)/78][(vector[i]->y()+2)/78]=i;
        vector[i]->setStyleSheet(QString("QToolButton{background:#d6b38d;color:red;border-radius: 35px;}"));
//        vector[i]->setIcon(QPixmap(QString(":/image/aqua.png")));
//        vector[i]->setIconSize(QSize(qiziwh,qiziwh));
        vector[i]->setText(QString(tubi[i]));
    }

    for(int i=16;i<25;i++){
        vector[i]->setGeometry(-1+(i-16)*78,-2+9*78,qiziwh,qiziwh);
        csx[i]=vector[i]->x();
        csy[i]=vector[i]->y();
        qpst[(vector[i]->x()+1)/78][(vector[i]->y()+2)/78]=i;
        vector[i]->setStyleSheet(QString("QToolButton{background:#d6b38d;color:black;border-radius: 35px;}"));
//        vector[i]->setIcon(QPixmap(QString(":/image/aqua.png")));
//        vector[i]->setIconSize(QSize(qiziwh,qiziwh));
        vector[i]->setText(QString(tubi[i]));
    }

    for(int i=25;i<27;i++){
        vector[i]->setGeometry(77+(i-25)*6*78,-2+7*78,qiziwh,qiziwh);
        csx[i]=vector[i]->x();
        csy[i]=vector[i]->y();
        qpst[(vector[i]->x()+1)/78][(vector[i]->y()+2)/78]=i;
        vector[i]->setStyleSheet(QString("QToolButton{background:#d6b38d;color:black;border-radius: 35px;}"));
//        vector[i]->setIcon(QPixmap(QString(":/image/aqua.png")));
//        vector[i]->setIconSize(QSize(qiziwh,qiziwh));
        vector[i]->setText(QString(tubi[i]));
    }
    for(int i=27;i<32;i++){
        vector[i]->setGeometry(-1+(i-27)*2*78,-2+6*78,qiziwh,qiziwh);
        csx[i]=vector[i]->x();
        csy[i]=vector[i]->y();
        qpst[(vector[i]->x()+1)/78][(vector[i]->y()+2)/78]=i;
        vector[i]->setStyleSheet(QString("QToolButton{background:#d6b38d;color:black;border-radius: 35px;}"));
//        vector[i]->setIcon(QPixmap(QString(":/image/aqua.png")));
//        vector[i]->setIconSize(QSize(qiziwh,qiziwh));
        vector[i]->setText(QString(tubi[i]));
    }

    for(int i=0;i<16;i++){
        connect(vector[i],&QToolButton::clicked,[=](){
            if(qzst[i]==0&&tune==1){
                qzst[i]=1;
            }
            else if(qzst[i]==1&&tune==1){
                qzst[i]=2;
            }
        });
    }

    for(int i=16;i<32;i++){
        connect(vector[i],&QToolButton::clicked,[=](){
            if(qzst[i]==0&&tune==0){
                qzst[i]=1;
            }
            else if(qzst[i]==1&&tune==0){
                qzst[i]=2;
            }
        });
    }
}

void Widget::mouseMoveEvent(QMouseEvent *event)
{//移动

    p_re = event->pos();
//    str = QString("%1 , %2").arg(p_re.x()).arg(p_re.y());
//    this->setWindowTitle(str);
    for(int k=0;k<32;k++){
        if(qzst[k]==1){
            vector[k]->raise();
            if(k<16){
                vector[k]->setStyleSheet(QString("QToolButton{background:#d6b38d;color:red;border-radius: 35px;border-style: outset;border-width: 5px;border-color:aqua}"));
            }
            else{
                vector[k]->setStyleSheet(QString("QToolButton{background:#d6b38d;color:black;border-radius: 35px;border-style: outset;border-width: 5px;border-color:aqua}"));
            }
            for(int i=0;i<32;i++){
                if(i!=k) qzst[i]=-1;
            }
            int i=(p_re.x()+1)/78;
            i=i*78-1;
            int j=(p_re.y()+2)/78;
            j=j*78-2;
            if(p_re.x()>=i&&p_re.x()<i+78&&p_re.y()>=j&&p_re.y()<j+78){
                if((k==0||k==8)&&tune==1){
                    int flag=pd_red_che(i,j,k);
                    qzmove(i,j,k,flag);
                }
                if((k==1||k==7)&&tune==1){
                    int flag=pd_red_ma(i,j,k);
                    qzmove(i,j,k,flag);
                }
                if((k==2||k==6)&&tune==1){
                    int flag=pd_red_xiang(i,j,k);
                    qzmove(i,j,k,flag);
                }
                if((k==3||k==5)&&tune==1){
                    int flag=pd_red_shi(i,j,k);
                    qzmove(i,j,k,flag);
                }
                if(k==4&&tune==1){
                    int flag=pd_red_shuai(i,j,k);
                    qzmove(i,j,k,flag);
                }
                if((k==9||k==10)&&tune==1){
                    int flag=pd_red_pao(i,j,k);
                    qzmove(i,j,k,flag);
                }
                if((k>=11&&k<=15)&&tune==1){
                    int flag=pd_red_bin(i,j,k);
                    qzmove(i,j,k,flag);
                }

                if((k==16||k==24)&&tune==0){
                    int flag=pd_black_che(i,j,k);
                    qzmove(i,j,k,flag);
                }
                if((k==17||k==23)&&tune==0){
                    int flag=pd_black_ma(i,j,k);
                    qzmove(i,j,k,flag);
                }
                if((k==18||k==22)&&tune==0){
                    int flag=pd_black_xiang(i,j,k);
                    qzmove(i,j,k,flag);
                }
                if((k==19||k==21)&&tune==0){
                    int flag=pd_black_shi(i,j,k);
                    qzmove(i,j,k,flag);
                }
                if(k==20&&tune==0){
                    int flag=pd_black_shuai(i,j,k);
                    qzmove(i,j,k,flag);
                }
                if((k==25||k==26)&&tune==0){
                    int flag=pd_black_pao(i,j,k);
                    qzmove(i,j,k,flag);
                }
                if((k>=27&&k<=31)&&tune==0){
                    int flag=pd_black_bin(i,j,k);
                    qzmove(i,j,k,flag);
                }
            }
        }
        if(qzst[k]==2){
            int i=(p_re.x()+1)/78;
            i=i*78-1;
            int j=(p_re.y()+2)/78;
            j=j*78-2;
            if(p_re.x()>=i&&p_re.x()<i+78&&p_re.y()>=j&&p_re.y()<j+78){
                if((k==0||k==8)&&tune==1){
                    int flag=pd_red_che(i,j,k);
                    qzredupdata(i,j,k,flag);
                }
                if((k==1||k==7)&&tune==1){
                    int flag=pd_red_ma(i,j,k);
                    qzredupdata(i,j,k,flag);
                }
                if((k==2||k==6)&&tune==1){
                    int flag=pd_red_xiang(i,j,k);
                    qzredupdata(i,j,k,flag);
                }
                if((k==3||k==5)&&tune==1){
                    int flag=pd_red_shi(i,j,k);
                    qzredupdata(i,j,k,flag);
                }
                if(k==4&&tune==1){
                    int flag=pd_red_shuai(i,j,k);
                    qzredupdata(i,j,k,flag);
                }
                if((k==9||k==10)&&tune==1){
                    int flag=pd_red_pao(i,j,k);
                    qzredupdata(i,j,k,flag);
                }
                if((k>=11&&k<=15)&&tune==1){
                    int flag=pd_red_bin(i,j,k);
                    qzredupdata(i,j,k,flag);
                }

                if((k==16||k==24)&&tune==0){
                    int flag=pd_black_che(i,j,k);
                    qzblackupdata(i,j,k,flag);
                }
                if((k==17||k==23)&&tune==0){
                    int flag=pd_black_ma(i,j,k);
                    qzblackupdata(i,j,k,flag);
                }
                if((k==18||k==22)&&tune==0){
                    int flag=pd_black_xiang(i,j,k);
                    qzblackupdata(i,j,k,flag);
                }
                if((k==19||k==21)&&tune==0){
                    int flag=pd_black_shi(i,j,k);
                    qzblackupdata(i,j,k,flag);
                }
                if(k==20&&tune==0){
                    int flag=pd_black_shuai(i,j,k);
                    qzblackupdata(i,j,k,flag);
                }
                if((k==25||k==26)&&tune==0){
                    int flag=pd_black_pao(i,j,k);
                    qzblackupdata(i,j,k,flag);
                }
                if((k>=27&&k<=31)&&tune==0){
                    int flag=pd_black_bin(i,j,k);
                    qzblackupdata(i,j,k,flag);
                }
            }
        }
    }
}

int Widget::pd_red_che(int x,int y,int xu){
    int st[15][15];
    for(int i=0;i<15;i++){
        for(int j=0;j<15;j++){
            st[i][j]=0;
        }
    }
    int lsx=(csx[xu]+1)/78,lsy=(csy[xu]+2)/78;
    st[lsx][lsy]=-1;

    for(int i=lsx+1;i<9;i++){
        if(qpst[i][lsy]>=0&&qpst[i][lsy]<32){
            if(qpst[i][lsy]>=16){
                st[i][lsy]=2;
            }
            break;
        }
        else{
            st[i][lsy]=1;
        }
    }
    for(int i=lsx-1;i>=0;i--){
        if(qpst[i][lsy]>=0&&qpst[i][lsy]<32){
            if(qpst[i][lsy]>=16){
                st[i][lsy]=2;
            }
            break;
        }
        else{
            st[i][lsy]=1;
        }
    }
    for(int i=lsy+1;i<15;i++){
        if(qpst[lsx][i]>=0&&qpst[lsx][i]<32){
            if(qpst[lsx][i]>=16){
                st[lsx][i]=2;
            }
            break;
        }
        else{
            st[lsx][i]=1;
        }
    }
    for(int i=lsy-1;i>=0;i--){
        if(qpst[lsx][i]>=0&&qpst[lsx][i]<32){
            if(qpst[lsx][i]>=16){
                st[lsx][i]=2;
            }
            break;
        }
        else{
            st[lsx][i]=1;
        }
    }
    return st[(x+1)/78][(y+2)/78];
}

int Widget::pd_red_ma(int x,int y,int xu){
    int st[15][15];
    for(int i=0;i<15;i++){
        for(int j=0;j<15;j++){
            st[i][j]=0;
        }
    }
    int lsx=(csx[xu]+1)/78,lsy=(csy[xu]+2)/78;
    st[lsx][lsy]=-1;

    int fa[8][2]={1,2,1,-2,-1,2,-1,-2,2,1,2,-1,-2,1,-2,-1};
    int fa2[8][2]={0,1,0,-1,0,1,0,-1,1,0,1,0,-1,0,-1,0};
    for(int i=0;i<8;i++){
        if(lsx+fa[i][0]<0||lsx+fa[i][0]>8||lsy+fa[i][1]<0||lsy+fa[i][1]>9) continue;
        if(qpst[lsx+fa2[i][0]][lsy+fa2[i][1]]!=-1) continue;
        if(qpst[lsx+fa[i][0]][lsy+fa[i][1]]==-1){
            st[lsx+fa[i][0]][lsy+fa[i][1]]=1;
        }
        if(qpst[lsx+fa[i][0]][lsy+fa[i][1]]>=16){
            st[lsx+fa[i][0]][lsy+fa[i][1]]=2;
        }
    }
    return st[(x+1)/78][(y+2)/78];
}

int Widget::pd_red_xiang(int x,int y,int xu){
    int st[15][15];
    for(int i=0;i<15;i++){
        for(int j=0;j<15;j++){
            st[i][j]=0;
        }
    }
    int lsx=(csx[xu]+1)/78,lsy=(csy[xu]+2)/78;
    st[lsx][lsy]=-1;

    int fa[4][2]={2,2,2,-2,-2,2,-2,-2};
    int fa2[4][2]={1,1,1,-1,-1,1,-1,-1};
    for(int i=0;i<4;i++){
        if(lsx+fa[i][0]<0||lsx+fa[i][0]>8||lsy+fa[i][1]<0||lsy+fa[i][1]>9) continue;
        if(lsy+fa2[i][1]>4) continue;
        if(qpst[lsx+fa2[i][0]][lsy+fa2[i][1]]!=-1) continue;
        if(qpst[lsx+fa[i][0]][lsy+fa[i][1]]==-1){
            st[lsx+fa[i][0]][lsy+fa[i][1]]=1;
        }
        if(qpst[lsx+fa[i][0]][lsy+fa[i][1]]>=16){
            st[lsx+fa[i][0]][lsy+fa[i][1]]=2;
        }
    }
    return st[(x+1)/78][(y+2)/78];
}

int Widget::pd_red_shi(int x,int y,int xu){
    int st[15][15];
    for(int i=0;i<15;i++){
        for(int j=0;j<15;j++){
            st[i][j]=0;
        }
    }
    int lsx=(csx[xu]+1)/78,lsy=(csy[xu]+2)/78;
    st[lsx][lsy]=-1;

    int fa[4][2]={1,1,1,-1,-1,1,-1,-1};
    for(int i=0;i<4;i++){
        if(lsx+fa[i][0]>=3&&lsx+fa[i][0]<=5&&lsy+fa[i][1]>=0&&lsy+fa[i][1]<=2){
            if(qpst[lsx+fa[i][0]][lsy+fa[i][1]]==-1){
                st[lsx+fa[i][0]][lsy+fa[i][1]]=1;
            }
            if(qpst[lsx+fa[i][0]][lsy+fa[i][1]]>=16){
                st[lsx+fa[i][0]][lsy+fa[i][1]]=2;
            }
        }
    }
    return st[(x+1)/78][(y+2)/78];
}

int Widget::pd_red_shuai(int x,int y,int xu){
    int st[15][15];
    for(int i=0;i<15;i++){
        for(int j=0;j<15;j++){
            st[i][j]=0;
        }
    }
    int lsx=(csx[xu]+1)/78,lsy=(csy[xu]+2)/78;
    st[lsx][lsy]=-1;

    int fa[4][2]={0,1,0,-1,-1,0,1,0};
    for(int i=0;i<4;i++){
        if(lsx+fa[i][0]>=3&&lsx+fa[i][0]<=5&&lsy+fa[i][1]>=0&&lsy+fa[i][1]<=2){
            if(qpst[lsx+fa[i][0]][lsy+fa[i][1]]==-1){
                st[lsx+fa[i][0]][lsy+fa[i][1]]=1;
            }
            if(qpst[lsx+fa[i][0]][lsy+fa[i][1]]>=16){
                st[lsx+fa[i][0]][lsy+fa[i][1]]=2;
            }
        }
    }
    for(int i=lsy+1;i<15;i++){
        if(qpst[lsx][i]==20) st[lsx][i]=2;
        if(qpst[lsx][i]!=-1) break;
    }
    return st[(x+1)/78][(y+2)/78];
}

int Widget::pd_red_pao(int x,int y,int xu){
    int st[15][15];
    for(int i=0;i<15;i++){
        for(int j=0;j<15;j++){
            st[i][j]=0;
        }
    }
    int lsx=(csx[xu]+1)/78,lsy=(csy[xu]+2)/78;
    st[lsx][lsy]=-1;

    int fl=1;
    for(int i=lsx+1;i<9;i++){
        if(qpst[i][lsy]>=0&&qpst[i][lsy]<32){
            if(fl==0){
                if(qpst[i][lsy]>=16){
                    st[i][lsy]=2;
                    break;
                }
                else if(qpst[i][lsy]!=-1){
                    break;
                }
            }
            if(fl==1) fl=0;
        }
        else{
            st[i][lsy]=fl;
        }
    }
    fl=1;
    for(int i=lsx-1;i>=0;i--){
        if(qpst[i][lsy]>=0&&qpst[i][lsy]<32){
            if(fl==0){
                if(qpst[i][lsy]>=16){
                    st[i][lsy]=2;
                    break;
                }
                else if(qpst[i][lsy]!=-1){
                    break;
                }
            }
            if(fl==1) fl=0;
        }
        else{
            st[i][lsy]=fl;
        }
    }
    fl=1;
    for(int i=lsy+1;i<15;i++){
        if(qpst[lsx][i]>=0&&qpst[lsx][i]<32){
            if(fl==0){
                if(qpst[lsx][i]>=16){
                    st[lsx][i]=2;
                    break;
                }
                else if(qpst[lsx][i]!=-1){
                    break;
                }
            }
            if(fl==1) fl=0;
        }
        else{
            st[lsx][i]=fl;
        }
    }
    fl=1;
    for(int i=lsy-1;i>=0;i--){
        if(qpst[lsx][i]>=0&&qpst[lsx][i]<32){
            if(fl==0){
                if(qpst[lsx][i]>=16){
                    st[lsx][i]=2;
                    break;
                }
                else if(qpst[lsx][i]!=-1){
                    break;
                }
            }
            if(fl==1) fl=0;
        }
        else{
            st[lsx][i]=fl;
        }
    }
    return st[(x+1)/78][(y+2)/78];
}
int Widget::pd_red_bin(int x,int y,int xu){
    int st[15][15];
    for(int i=0;i<15;i++){
        for(int j=0;j<15;j++){
            st[i][j]=0;
        }
    }
    int lsx=(csx[xu]+1)/78,lsy=(csy[xu]+2)/78;
    st[lsx][lsy]=-1;

    if(lsy+1<=9&&qpst[lsx][lsy+1]==-1){
        st[lsx][lsy+1]=1;
    }
    else if(lsy+1<=9&&qpst[lsx][lsy+1]>=16){
        st[lsx][lsy+1]=2;
    }
    if(lsy>4){
        if(lsx+1<9&&qpst[lsx+1][lsy]==-1){
            st[lsx+1][lsy]=1;
        }
        else if(lsx+1<9&&qpst[lsx+1][lsy]>=16){
            st[lsx+1][lsy]=2;
        }
        if(lsx-1<9&&qpst[lsx-1][lsy]==-1){
            st[lsx-1][lsy]=1;
        }
        else if(lsx-1<9&&qpst[lsx-1][lsy]>=16){
            st[lsx-1][lsy]=2;
        }
    }
    return st[(x+1)/78][(y+2)/78];
}

int Widget::pd_black_che(int x,int y,int xu){
    int st[15][15];
    for(int i=0;i<15;i++){
        for(int j=0;j<15;j++){
            st[i][j]=0;
        }
    }
    int lsx=(csx[xu]+1)/78,lsy=(csy[xu]+2)/78;
    st[lsx][lsy]=-1;

    for(int i=lsx+1;i<9;i++){
        if(qpst[i][lsy]>=0&&qpst[i][lsy]<32){
            if(qpst[i][lsy]<16&&qpst[i][lsy]>=0){
                st[i][lsy]=2;
            }
            break;
        }
        else{
            st[i][lsy]=1;
        }
    }
    for(int i=lsx-1;i>=0;i--){
        if(qpst[i][lsy]>=0&&qpst[i][lsy]<32){
            if(qpst[i][lsy]<16&&qpst[i][lsy]>=0){
                st[i][lsy]=2;
            }
            break;
        }
        else{
            st[i][lsy]=1;
        }
    }
    for(int i=lsy+1;i<15;i++){
        if(qpst[lsx][i]>=0&&qpst[lsx][i]<32){
            if(qpst[lsx][i]<16&&qpst[lsx][i]>=0){
                st[lsx][i]=2;
            }
            break;
        }
        else{
            st[lsx][i]=1;
        }
    }
    for(int i=lsy-1;i>=0;i--){
        if(qpst[lsx][i]>=0&&qpst[lsx][i]<32){
            if(qpst[lsx][i]<16&&qpst[lsx][i]>=0){
                st[lsx][i]=2;
            }
            break;
        }
        else{
            st[lsx][i]=1;
        }
    }
    return st[(x+1)/78][(y+2)/78];
}

int Widget::pd_black_ma(int x,int y,int xu){
    int st[15][15];
    for(int i=0;i<15;i++){
        for(int j=0;j<15;j++){
            st[i][j]=0;
        }
    }
    int lsx=(csx[xu]+1)/78,lsy=(csy[xu]+2)/78;
    st[lsx][lsy]=-1;

    int fa[8][2]={1,2,1,-2,-1,2,-1,-2,2,1,2,-1,-2,1,-2,-1};
    int fa2[8][2]={0,1,0,-1,0,1,0,-1,1,0,1,0,-1,0,-1,0};
    for(int i=0;i<8;i++){
        if(lsx+fa[i][0]<0||lsx+fa[i][0]>8||lsy+fa[i][1]<0||lsy+fa[i][1]>9) continue;
        if(qpst[lsx+fa2[i][0]][lsy+fa2[i][1]]!=-1) continue;
        if(qpst[lsx+fa[i][0]][lsy+fa[i][1]]==-1){
            st[lsx+fa[i][0]][lsy+fa[i][1]]=1;
        }
        if(qpst[lsx+fa[i][0]][lsy+fa[i][1]]<16&&qpst[lsx+fa[i][0]][lsy+fa[i][1]]>=0){
            st[lsx+fa[i][0]][lsy+fa[i][1]]=2;
        }
    }
    return st[(x+1)/78][(y+2)/78];
}

int Widget::pd_black_xiang(int x,int y,int xu){
    int st[15][15];
    for(int i=0;i<15;i++){
        for(int j=0;j<15;j++){
            st[i][j]=0;
        }
    }
    int lsx=(csx[xu]+1)/78,lsy=(csy[xu]+2)/78;
    st[lsx][lsy]=-1;

    int fa[4][2]={2,2,2,-2,-2,2,-2,-2};
    int fa2[4][2]={1,1,1,-1,-1,1,-1,-1};
    for(int i=0;i<4;i++){
        if(lsx+fa[i][0]<0||lsx+fa[i][0]>8||lsy+fa[i][1]<0||lsy+fa[i][1]>9) continue;
        if(lsy+fa2[i][1]<=4) continue;
        if(qpst[lsx+fa2[i][0]][lsy+fa2[i][1]]!=-1) continue;
        if(qpst[lsx+fa[i][0]][lsy+fa[i][1]]==-1){
            st[lsx+fa[i][0]][lsy+fa[i][1]]=1;
        }
        if(qpst[lsx+fa[i][0]][lsy+fa[i][1]]<16&&qpst[lsx+fa[i][0]][lsy+fa[i][1]]>=0){
            st[lsx+fa[i][0]][lsy+fa[i][1]]=2;
        }
    }
    return st[(x+1)/78][(y+2)/78];
}

int Widget::pd_black_shi(int x,int y,int xu){
    int st[15][15];
    for(int i=0;i<15;i++){
        for(int j=0;j<15;j++){
            st[i][j]=0;
        }
    }
    int lsx=(csx[xu]+1)/78,lsy=(csy[xu]+2)/78;
    st[lsx][lsy]=-1;

    int fa[4][2]={1,1,1,-1,-1,1,-1,-1};
    for(int i=0;i<4;i++){
        if(lsx+fa[i][0]>=3&&lsx+fa[i][0]<=5&&lsy+fa[i][1]>=7&&lsy+fa[i][1]<=9){
            if(qpst[lsx+fa[i][0]][lsy+fa[i][1]]==-1){
                st[lsx+fa[i][0]][lsy+fa[i][1]]=1;
            }
            if(qpst[lsx+fa[i][0]][lsy+fa[i][1]]<16&&qpst[lsx+fa[i][0]][lsy+fa[i][1]]>=0){
                st[lsx+fa[i][0]][lsy+fa[i][1]]=2;
            }
        }
    }
    return st[(x+1)/78][(y+2)/78];
}

int Widget::pd_black_shuai(int x,int y,int xu){
    int st[15][15];
    for(int i=0;i<15;i++){
        for(int j=0;j<15;j++){
            st[i][j]=0;
        }
    }
    int lsx=(csx[xu]+1)/78,lsy=(csy[xu]+2)/78;
    st[lsx][lsy]=-1;

    int fa[4][2]={0,1,0,-1,-1,0,1,0};
    for(int i=0;i<4;i++){
        if(lsx+fa[i][0]>=3&&lsx+fa[i][0]<=5&&lsy+fa[i][1]>=7&&lsy+fa[i][1]<=9){
            if(qpst[lsx+fa[i][0]][lsy+fa[i][1]]==-1){
                st[lsx+fa[i][0]][lsy+fa[i][1]]=1;
            }
            if(qpst[lsx+fa[i][0]][lsy+fa[i][1]]<16&&qpst[lsx+fa[i][0]][lsy+fa[i][1]]>=0){
                st[lsx+fa[i][0]][lsy+fa[i][1]]=2;
            }
        }
    }
    for(int i=lsy-1;i>=0;i--){
        if(qpst[lsx][i]==4) st[lsx][i]=2;
        if(qpst[lsx][i]!=-1) break;
    }
    return st[(x+1)/78][(y+2)/78];
}

int Widget::pd_black_pao(int x,int y,int xu){
    int st[15][15];
    for(int i=0;i<15;i++){
        for(int j=0;j<15;j++){
            st[i][j]=0;
        }
    }
    int lsx=(csx[xu]+1)/78,lsy=(csy[xu]+2)/78;
    st[lsx][lsy]=-1;

    int fl=1;
    for(int i=lsx+1;i<9;i++){
        if(qpst[i][lsy]>=0&&qpst[i][lsy]<32){
            if(fl==0){
                if(qpst[i][lsy]<16&&qpst[i][lsy]>=0){
                    st[i][lsy]=2;
                    break;
                }
                else if(qpst[i][lsy]!=-1){
                    break;
                }
            }
            if(fl==1) fl=0;
        }
        else{
            st[i][lsy]=fl;
        }
    }
    fl=1;
    for(int i=lsx-1;i>=0;i--){
        if(qpst[i][lsy]>=0&&qpst[i][lsy]<32){
            if(fl==0){
                if(qpst[i][lsy]<16&&qpst[i][lsy]>=0){
                    st[i][lsy]=2;
                    break;
                }
                else if(qpst[i][lsy]!=-1){
                    break;
                }
            }
            if(fl==1) fl=0;
        }
        else{
            st[i][lsy]=fl;
        }
    }
    fl=1;
    for(int i=lsy+1;i<15;i++){
        if(qpst[lsx][i]>=0&&qpst[lsx][i]<32){
            if(fl==0){
                if(qpst[lsx][i]<16&&qpst[lsx][i]>=0){
                    st[lsx][i]=2;
                    break;
                }
                else if(qpst[lsx][i]!=-1){
                    break;
                }
            }
            if(fl==1) fl=0;
        }
        else{
            st[lsx][i]=fl;
        }
    }
    fl=1;
    for(int i=lsy-1;i>=0;i--){
        if(qpst[lsx][i]>=0&&qpst[lsx][i]<32){
            if(fl==0){
                if(qpst[lsx][i]<16&&qpst[lsx][i]>=0){
                    st[lsx][i]=2;
                    break;
                }
                else if(qpst[lsx][i]!=-1){
                    break;
                }
            }
            if(fl==1) fl=0;
        }
        else{
            st[lsx][i]=fl;
        }
    }
    return st[(x+1)/78][(y+2)/78];
}
int Widget::pd_black_bin(int x,int y,int xu){
    int st[15][15];
    for(int i=0;i<15;i++){
        for(int j=0;j<15;j++){
            st[i][j]=0;
        }
    }
    int lsx=(csx[xu]+1)/78,lsy=(csy[xu]+2)/78;
    st[lsx][lsy]=-1;

    if(lsy-1>=0&&qpst[lsx][lsy-1]==-1){
        st[lsx][lsy-1]=1;
    }
    else if(lsy-1<=9&&qpst[lsx][lsy-1]<16){
        st[lsx][lsy-1]=2;
    }
    if(lsy<=4){
        if(lsx+1<9&&qpst[lsx+1][lsy]==-1){
            st[lsx+1][lsy]=1;
        }
        else if(lsx+1<9&&qpst[lsx+1][lsy]<16){
            st[lsx+1][lsy]=2;
        }
        if(lsx-1<9&&qpst[lsx-1][lsy]==-1){
            st[lsx-1][lsy]=1;
        }
        else if(lsx-1<9&&qpst[lsx-1][lsy]<16){
            st[lsx-1][lsy]=2;
        }
    }
    return st[(x+1)/78][(y+2)/78];
}

void Widget::qzmove(int i, int j, int k, int flag){
    if(flag==1){
        vector[k]->setGeometry(i,j,70,70);
    }
    else if(flag==-1){
        vector[k]->setGeometry(i,j,70,70);
    }
    else if(flag==2){
        vector[k]->setGeometry(i,j,70,70);
    }
    else{
        vector[k]->setGeometry(csx[k],csy[k],70,70);
    }
}

void Widget::qzredupdata(int i, int j, int k, int flag){
    vector[k]->setStyleSheet(QString("QToolButton{background:#d6b38d;color:red;border-radius: 35px;}"));
    if(flag==1){
        vector[k]->setGeometry(i,j,70,70);
        qpst[(csx[k]+1)/78][(csy[k]+2)/78]=-1;
        qpst[(i+1)/78][(j+2)/78]=k;
        csx[k]=i;
        csy[k]=j;
        for(int l=0;l<32;l++){
            qzst[l]=0;
        }
        tune=0;
        if(pd_red_j()==1){
            ui->win_label->setStyleSheet("background:aqua;color:black");
            ui->win_label->setText("红方将军！");
        }
        else{
            ui->win_label->setStyleSheet("background:aqua;color:black");
            ui->win_label->setText("黑方落子中...");
        }
        all_tune();
    }
    else if(flag==-1){
        vector[k]->setGeometry(i,j,70,70);
        for(int l=0;l<32;l++){
            qzst[l]=0;
        }
    }
    else if(flag==2){
//        qDebug()<<i<<" "<<j<<endl;
        int sfwin=qpst[(i+1)/78][(j+2)/78];
        vector[qpst[(i+1)/78][(j+2)/78]]->setVisible(false);
        vector[k]->setGeometry(i,j,70,70);
        qpst[(csx[k]+1)/78][(csy[k]+2)/78]=-1;
        qpst[(i+1)/78][(j+2)/78]=k;
        csx[k]=i;
        csy[k]=j;
        for(int l=0;l<32;l++){
            qzst[l]=0;
        }
        tune=0;
        if(pd_red_j()==1){
            ui->win_label->setStyleSheet("background:aqua;color:black");
            ui->win_label->setText("红方将军！");
        }
        else{
            ui->win_label->setStyleSheet("background:aqua;color:black");
            ui->win_label->setText("黑方落子中...");
        }
        all_tune();
        if(sfwin==20) red_win();
    }
}

void Widget::qzblackupdata(int i, int j, int k, int flag){
    vector[k]->setStyleSheet(QString("QToolButton{background:#d6b38d;color:black;border-radius: 35px;}"));
//    qDebug()<<flag;
    if(flag==1){
        vector[k]->setGeometry(i,j,70,70);
        qpst[(csx[k]+1)/78][(csy[k]+2)/78]=-1;
        qpst[(i+1)/78][(j+2)/78]=k;
        csx[k]=i;
        csy[k]=j;
        for(int l=0;l<32;l++){
            qzst[l]=0;
        }
        tune=1;
        if(pd_black_j()==1){
            ui->win_label->setStyleSheet("background:aqua;color:red");
            ui->win_label->setText("黑方将军！");
        }
        else{
            ui->win_label->setStyleSheet("background:aqua;color:red");
            ui->win_label->setText("红方落子中...");
        }
        all_tune();
    }
    else if(flag==-1){
        vector[k]->setGeometry(i,j,70,70);
        for(int l=0;l<32;l++){
            qzst[l]=0;
        }
    }
    else if(flag==2){
//        qDebug()<<flag;
//        qDebug()<<qpst[(i+1)/78][(j+2)/78]<<endl;
        int sfwin=qpst[(i+1)/78][(j+2)/78];
        vector[qpst[(i+1)/78][(j+2)/78]]->setVisible(false);
        vector[k]->setGeometry(i,j,70,70);
        qpst[(csx[k]+1)/78][(csy[k]+2)/78]=-1;
        qpst[(i+1)/78][(j+2)/78]=k;
        csx[k]=i;
        csy[k]=j;
        for(int l=0;l<32;l++){
            qzst[l]=0;
        }
        tune=1;
        if(pd_black_j()==1){
            ui->win_label->setStyleSheet("background:aqua;color:red");
            ui->win_label->setText("黑方将军！");
        }
        else{
            ui->win_label->setStyleSheet("background:aqua;color:red");
            ui->win_label->setText("红方落子中...");
        }
        all_tune();
        if(sfwin==4) black_win();
    }
}
int Widget::pd_red_j(){
    int sfjj=0;
    if(pd_red_che(csx[20],csy[20],0)==2||pd_red_che(csx[20],csy[20],8)==2){
        sfjj=1;
    }
    else if(pd_red_ma(csx[20],csy[20],1)==2||pd_red_ma(csx[20],csy[20],7)==2){
        sfjj=1;
    }
    else if(pd_red_pao(csx[20],csy[20],9)==2||pd_red_pao(csx[20],csy[20],10)==2){
        sfjj=1;
    }
    else if(pd_red_bin(csx[20],csy[20],11)==2||pd_red_bin(csx[20],csy[20],12)==2||pd_red_bin(csx[20],csy[20],13)==2||pd_red_bin(csx[20],csy[20],14)==2||pd_red_bin(csx[20],csy[20],15)==2){
        sfjj=1;
    }
    else if(pd_red_shuai(csx[20],csy[20],4)==2){
        sfjj=1;
    }
    return sfjj;
}
int Widget::pd_black_j(){
    int sfjj=0;
    if(pd_black_che(csx[4],csy[4],16)==2||pd_black_che(csx[4],csy[4],24)==2){
        sfjj=1;
    }
    else if(pd_black_ma(csx[4],csy[4],17)==2||pd_black_ma(csx[4],csy[4],23)==2){
        sfjj=1;
    }
    else if(pd_black_pao(csx[4],csy[4],25)==2||pd_black_pao(csx[4],csy[4],26)==2){
        sfjj=1;
    }
    else if(pd_black_bin(csx[4],csy[4],27)==2||pd_black_bin(csx[4],csy[4],28)==2||pd_black_bin(csx[4],csy[4],29)==2||pd_black_bin(csx[4],csy[4],30)==2||pd_black_bin(csx[4],csy[4],31)==2){
        sfjj=1;
    }
    else if(pd_black_shuai(csx[4],csy[4],20)==2){
        sfjj=1;
    }
    return sfjj;
}

void Widget::red_win(){
    tune=2;
    timer->stop();
    ui->time_label->setText(QString("游 戏 结 束 !"));
    ui->time_label->setStyleSheet("background:aqua;color:red");
    ui->win_label->setText(QString("红 方 胜 利 !"));
    ui->win_label->setStyleSheet("background:aqua;color:red");
}
void Widget::black_win(){
    tune=2;
    timer->stop();
    ui->time_label->setText(QString("游 戏 结 束 !"));
    ui->time_label->setStyleSheet("background:aqua;color:black");
    ui->win_label->setText(QString("黑 方 胜 利 !"));
    ui->win_label->setStyleSheet("background:aqua;color:black");
}
void Widget::all_tune(){
    if(tune==1){
        if(jy==1){
            ui->time_label->setText(QString("回合时间:%02秒").arg(sj));
            if(sj==0) black_win();
            sj--;
        }
        else{
            jy=1;
            sj=90;
            ui->time_label->setStyleSheet("background:aqua;color:red");
            ui->time_label->setText("回合时间:90秒");
        }
    }
    else{
        if(jy==0){
            ui->time_label->setText(QString("回合时间:%02秒").arg(sj));
            if(sj==0) red_win();
            sj--;
        }
        else{
            jy=0;
            sj=90;
            ui->time_label->setStyleSheet("background:aqua;color:black");
            ui->time_label->setText("回合时间:90秒");
        }
    }
}

Widget::~Widget()
{
    delete ui;
}
